package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import lombok.extern.slf4j.Slf4j;

/**
 * BK学生实体（映射xg_students表）
 */
@Data
@Slf4j
@TableName("xg_students")  // 对应数据库表名
public class BKStudent {

    @TableId(type = IdType.AUTO)
    private Integer id;             // 序号（自增主键）

    private String stuCounselorName; // 辅导员姓名（对应stu_counselor_name）
    private String stuMajor;         // 专业名称（对应stu_major）
    private String stuClass;         // 班级（对应stu_class）
    private Integer stuClassId;      // 班级内序号（对应stu_class_id）
    private String stuSno;           // 学号（对应stu_sno）
    private String stuName;          // 姓名（对应stu_name）
    private String stuSex;           // 性别（对应stu_sex：0=男，1=女）
    private String stuNation;        // 民族（对应stu_nation）
    private LocalDateTime stuBirth;  // 出生日期（对应stu_birth）
    private String stuPartyType;     // 政治面貌（对应stu_party_type）
    private String stuDormitory;     // 宿舍（对应stu_dormitory）
    private String stuPlaceOfOrigin; // 籍贯（祖籍）（对应stu_place_of_origin）
    private String stuBirthplaceOfBirth; // 生源地（高考地）（对应stu_birthplace_of_birth）
    private String stuHomeAddress;   // 家庭详细住址（对应stu_home_address）
    private String stuPreviousInstitution; // 上一学历毕业院校（对应stu_previous_institution）
    private String stuTelephone;     // 个人电话（对应stu_telephone）
    private String stuHomeTelephone; // 家庭电话（对应stu_home_telephone）
    private String stuQq;            // QQ号（对应stu_qq）
    private String stuWx;            // 微信号（对应stu_wx）
    private String stuEmail;         // 电子邮箱号（对应stu_email）
    private String stuBelief;        // 宗教信仰（对应stu_belief）
    private String stuRole;          // 学生职务（对应stu_role）
    private String stuDegreeLevel;   // 学生学历（对应stu_degree_level）
    private Long userId;             // 辅导员序号（用户ID）（对应user_id）
    private Long deptId;             // 部门id（对应dept_id）
    private LocalDateTime updateTime;// 更新时间（对应update_time）
    private String auditStatus;      // 审核状态（对应audit_status）
    private String rejectionReason;  // 未通过原因（对应rejection_reason）


    // ------------------------------
    // 新增：从BKApiDTO映射数据的方法
    // ------------------------------
    public void fromApiDTO(BKApiDTO apiDTO) {
        // 1. 基础字段直接映射
        this.stuSno = apiDTO.getXH();                  // 学号
        this.stuName = apiDTO.getXM();                  // 姓名
        this.stuPlaceOfOrigin = apiDTO.getJGMC();       // 籍贯
        this.stuHomeAddress = apiDTO.getTXDZ();         // 家庭地址
        this.stuTelephone = apiDTO.getLXDH();           // 个人电话
        this.stuEmail = apiDTO.getDZYX();               // 电子邮箱
        this.stuNation = apiDTO.getMZM();               // 民族码（待转中文）
        this.stuPartyType = apiDTO.getZZMMM();          // 政治面貌码（待转中文）

        this.stuSex =apiDTO.getXBM();

        // 3. 出生日期转换（API：yyyyMMdd → 数据库：LocalDateTime）
        this.stuBirth = convertBirthDate(apiDTO.getCSRQ());

        // 4. 默认值设置
        //this.auditStatus = "0";                    // 默认未审核
        this.updateTime = LocalDateTime.now();          // 更新时间为当前时间
    }

    // 出生日期转换逻辑
    // ------------------------------
    private LocalDateTime convertBirthDate(String apiBirthStr) {
        if (apiBirthStr == null || apiBirthStr.length() != 8) {
            log.warn("学号[{}]出生日期格式异常：{}", this.stuSno, apiBirthStr);
            return null;
        }
        try {
            // API格式：yyyyMMdd → 转换为LocalDate后转LocalDateTime
            LocalDate birthDate = LocalDate.parse(apiBirthStr, DateTimeFormatter.ofPattern("yyyyMMdd"));
            return birthDate.atStartOfDay(); // 转为当天0点的LocalDateTime
        } catch (DateTimeParseException e) {
            log.error("学号[{}]出生日期转换失败：{}", this.stuSno, apiBirthStr, e);
            return null;
        }
    }
}